/************************* 版权声明 *********************************
 * 
 * 版权所有：Apache License 2.0
 * 
 ************************* 版本声明 *********************************
 *@since jdk1.5
 *@version 0.1
 ************************* 变更记录 *********************************
 *
 * 创建者：bijiqiang Email:bijiqiang@gmail.com   创建日期： 2010-2-9
 * 创建记录：创建类结构。
 * 
 * 修改者：       修改日期：
 * 修改记录：
 *
 * 修改者：       修改日期：
 * 修改记录：
 * ……
 ************************* To  Do *********************************
 *
 * 1、实现所有未实现的方法（抛出UnsupportedOperationException的方法）。
 * 
 ************************* 随   笔 *********************************
 *
 * 
 * 
 ******************************************************************
 */

package com.realgodo.site.common;

/**
 * 天气查询. 推荐使用此 google service 查询<br/>
 * <a href="mailto:liu_anxin@yahoo.cn">天气</a>
 * 
 * @author Yh
 */
public class WeatherUtils {

	/**
	 * 使用 google 查询天气<br/>
	 * 上海: http://www.google.com/ig/api?hl=zh_cn&weather=shanghai
	 * 
	 * @param city
	 *            城市拼音, 如 北京: beijing
	 */
	public static String getweather(String city) {
		StringBuilder sbd = new StringBuilder();
		try {
			String ur = "http://www.google.com/ig/api?hl=zh_cn&weather=";
			java.net.URL url = new java.net.URL(ur + city);
			java.io.InputStream in = url.openStream();

			String st = "";
			// 将流转换为 文本. 此一过程是为了解决乱码问题
			java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();

			int i = -1;
			while ((i = in.read()) != -1) {
				bos.write(i);
			}
			// 转换编码为 GB18030, 否则会乱码
			st = bos.toString().replace("<?xml version=\"1.0\"?>",
					"<?xml version=\"1.0\" encoding=\"GB18030\"?>");
			System.out.println(st);

			// 将文本转换成流
			java.io.InputStream inp = new java.io.ByteArrayInputStream(st
					.getBytes());

			// 读取流
			org.w3c.dom.Document doc = javax.xml.parsers.DocumentBuilderFactory
					.newInstance().newDocumentBuilder().parse(inp);

			// 日期
			org.w3c.dom.NodeList n1 = doc.getElementsByTagName(
					"forecast_information").item(0).getChildNodes();
			// 城市:
			sbd.append(n1.item(4).getAttributes().item(0).getNodeValue())
					.append(" ").append(city).append(" : ");

			// 天气, 最高气温 最低气温
			org.w3c.dom.NodeList n2 = doc.getElementsByTagName(
					"forecast_conditions").item(0).getChildNodes();
			sbd.append(n2.item(4).getAttributes().item(0).getNodeValue())
					.append(", ").append(
							n2.item(1).getAttributes().item(0).getNodeValue())
					.append("摄氏度").append(
							n2.item(2).getAttributes().item(0).getNodeValue())
					.append("摄氏度");

		} catch (Exception e) {
			sbd.append("获取天气失败或不存在此城市");
		}
		return sbd.toString();
	}

	public static void main(String[] args) {
		System.out.println("北京天气: " + WeatherUtils.getweather("beijing"));
	}
}
